from enum import Enum

__all__ = [
    "CeilingFan", "Light", "GarageDoor", "HotTub", "Stereo"
]

class CeilingFan:
    class Level(Enum):
        HIGH = 3,
        MEDIUM = 2,
        LOW = 1
        OFF = 0

    def __init__(self, location: str):
        self._location = location
        self._level = self.Level.OFF

    def high(self):
        self._level = self.Level.HIGH
        print(f"{self._location} ceiling fan is on high")

    def medium(self):
        self._level = self.Level.MEDIUM
        print(f"{self._location} ceiling fan is on medium")

    def low(self):
        self._level = self.Level.LOW
        print(f"{self._location} ceiling fan is on low")

    def off(self):
        self._level = 0
        print(f"{self._location} ceiling fan is off")

    def get_speed(self):
        return self._level


class Light:
    def __init__(self, location: str):
        self._location = location

    def on(self):
        print(f"{self._location} light is on")

    def off(self):
        print(f"{self._location} light is off")


class GarageDoor:
    class State(Enum):
        UP = "up"
        DOWN = "down"

    def __init__(self, location: str):
        self._location = location
        self._state = self.State.DOWN

    @property
    def state(self):
        return self._state

    def up(self):
        self._state = self.State.UP
        print(f"{self._location} garage Door is Up")

    def down(self):
        self._state = self.State.DOWN
        print(f"{self._location} garage Door is Down")

    def stop(self):
        print(f"{self._location} garage Door is Stopped")

    def light_on(self):
        print(f"{self._location} garage light is on")

    def light_off(self):
        print(f"{self._location} garage light is off")


class HotTub:
    def __init__(self):
        self._on = False
        self._temperature = 0

    def on(self):
        self._on = True

    def off(self):
        self._on = False

    def bubbles_on(self):
        if self._on:
            print("Hot tub is bubbling!")

    def bubbles_off(self):
        if self._on:
            print("Hot tub is not bubbling")

    def jets_on(self):
        if self._on:
            print("Hot tub jets are on")

    def jets_off(self):
        if self._on:
            print("Hot tub jets are off")

    @property
    def temperature(self):
        return self._temperature

    @temperature.setter
    def temperature(self, value):
        self._temperature = value

    def heat(self):
        self._temperature = 105
        print("Hot tub is heating to a steaming 105 degrees")

    def cool(self):
        self._temperature = 98
        print("Hot tub is cooling to 98 degrees")


class Stereo:
    def __init__(self, location: str):
        self._location = location

    def on(self):
        print(f"{self._location} stereo is on")

    def off(self):
        print(f"{self._location} stereo is off")

    def set_cd(self):
        print(f"{self._location} stereo is set for CD input")

    def set_dvd(self):
        print(f"{self._location} stereo is set for DVD input")

    def set_radio(self):
        print(f"{self._location} stereo is set for Radio")

    def set_volume(self, volume: int):
        print(f"{self._location} stereo volume set to {volume}")